package com.apps.saspect;

import com.apps.saspect.enums.ThreadLockPattern;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 线程锁,可以让某个方法变成单线程执行,防止出现并发问题,但这是吧可重入锁,需配合@JoinKey使用，否则会对整个方法加锁
 * 负责对方法进行分布式锁,防止并发!
 * 只支持方法传参为 int,float,double,string类型
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ThreadLock {

    /**
     * 锁的模式,是单纯作用在方法上还是配合OnSingleThread
     * @return
     */
    ThreadLockPattern patten() default ThreadLockPattern.Method;
    /**
     * 尝试获取锁的时间,秒为单位
     * @return
     */
    long trytime() default 5;

    /**
     * 锁自动释放的时间,秒为单位
     * @return
     */
    long releasetime() default 6;

    /**
     * 获取锁失败时尝试获取锁的次数
     * @return
     */
    int trynum() default 5;

    /**
     * 获取锁失败时的提示语
     * @return
     */
    String errMsg() default "系统繁忙";

}
